不同類型的檔案通常有不同的檔案格式,但我偏向稱其為檔案標頭,而這些檔案又會被自動帶上不同的副檔名,作業系統就是依照不同的副檔名來開啟不同的檔案,我們可以試著將不同的檔案用不同的軟體打開,雖然通常會打開失敗,這就是因為軟體讀不到它所要的那個格式,例如說 Windows 的執行檔 .exe 又稱為 PE (Portable Executable),他的檔案開頭兩個 bytes 就一定是 MZ,在後面還會有一段字串
This Program cannot be run in DOS mode.
這部分就是都是包含在 PE 的標頭裡面,甚至還有程式進入點、image base、相對虛擬位置...,紀錄了相當多的資訊。但如果把副檔名 .exe 直接改成 .mp3 用影音軟體打開會發現無法開啟,因為軟體無法解析這個檔案。相關可以去閱讀 2016 年另一位作者寫的 鐵人賽,裡面有更詳盡的關於 PE 的標頭講解。
在資安領域的話,可以去玩資料隱寫,例如 png 隱寫,jpg 隱寫、或是 zip 假加密等玩法,這些都需要去注意到檔案格式,因為會對裡面的十六進位數據進行觀察或修改的動作,對於正常的電腦使用者而言這些玩法會是非常的腦洞大開。
以 jpg 隱寫為例,jpg 具有開頭字元 (FF D8)與作為標尾的結束字元 (FF D9),當圖片開啟時,圖片檢視器在讀到結束字元後會直接無視後面的所有東西,所以可以用十六進位編輯器(我是用 HxD)在結束字元後藏另一張圖、壓縮檔、字串或其他內容。
所以可以這樣玩
又以 zip 假加密為例,zip 的開頭字元是 50 4B 03 04,在後面不遠處有會有 14 00 的數據,在後面接著會有兩個 bytes 的位置是標示有無加密的地方,若將其改成奇數會是加密,偶數是無密碼。但我對有多個檔案的壓縮檔不夠熟悉,在進行假加密時還是沒辦法一改就到位。具體做法可以閱讀這篇 文章,文章中有這位作者的參考資料,也有更詳盡的解說。
在 zip 檔案格式的文檔中,可以在 general purpose bit flag 中看到 bit 0 的位置表示檔案是否加密
往上可以回追到 Central directory structure 底下的 File header 下面
而 File header 的 central file header sinature 為 0x02014b50 ,因此只要用十六進位編輯器去修改其中的內容
記得會有小序端的問題所以要修改 14 00 00 00 的第三個 byte,而不是第四個 byte。
★可以只鎖單個檔案喔★
note:
如果回去注意文檔可以注意到 50 4b 03 04 的 signature 底下也有這個 flag,但我剛剛去修改了卻並沒有鎖起來==